@use '@styles/core/mixin.scss' as *;

// 菜单样式变量
$menu-height: 42px;
$menu-icon-size: 20px;
$menu-font-size: 14px;
$hover-bg-color: var(--art-gray-200);
$popup-menu-height: 40px;
$popup-menu-padding: 8px;
$popup-menu-margin: 5px;
$popup-menu-radius: 6px;

// 通用菜单项样式
@mixin menu-item-base {
  width: calc(100% - 16px);
  margin-left: 8px;
  border-radius: 6px;

  .menu-icon {
    margin-left: -7px;
  }
}

// 通用 hover 样式
@mixin menu-hover($bg-color) {
  .el-sub-menu__title:hover,
  .el-menu-item:not(.is-active):hover {
    background: $bg-color !important;
  }
}

// 通用选中样式
@mixin menu-active($color, $bg-color, $icon-color: var(--theme-color)) {
  .el-menu-item.is-active {
    color: $color !important;
    background-color: $bg-color;

    .menu-icon {
      .art-svg-icon {
        color: $icon-color !important;
      }
    }
  }
}

// 弹窗菜单项样式
@mixin popup-menu-item {
  height: $popup-menu-height;
  margin-bottom: $popup-menu-margin;
  border-radius: $popup-menu-radius;

  .menu-icon {
    margin-right: 5px;
  }

  &:last-of-type {
    margin-bottom: 0;
  }
}

// 主题菜单通用样式（合并 design 和 dark 主题的共同逻辑）
@mixin theme-menu-base {
  .el-sub-menu__title,
  .el-menu-item {
    @include menu-item-base;
  }
}

// 弹窗菜单通用样式
@mixin popup-menu-base($hover-bg, $active-color, $active-bg) {
  .el-menu--popup {
    padding: $popup-menu-padding;

    .el-sub-menu__title:hover,
    .el-menu-item:hover {
      background-color: $hover-bg !important;
      border-radius: $popup-menu-radius;
    }

    .el-menu-item {
      @include popup-menu-item;

      &.is-active {
        color: $active-color !important;
        background-color: $active-bg !important;
      }
    }

    .el-sub-menu {
      @include popup-menu-item;

      height: $popup-menu-height !important;

      .el-sub-menu__title {
        height: $popup-menu-height !important;
        border-radius: $popup-menu-radius;
      }
    }
  }
}

.layout-sidebar {
  // ---------------------- Modify default style ----------------------

  // 菜单折叠样式
  .menu-left-close {
    .header {
      .logo {
        margin: 0 auto;
      }
    }
  }

  // 菜单图标
  .menu-icon {
    margin-right: 8px;
    font-size: $menu-icon-size;
  }

  // 菜单高度
  .el-sub-menu__title,
  .el-menu-item {
    height: $menu-height !important;
    margin-bottom: 4px;
    line-height: $menu-height !important;

    span {
      font-size: $menu-font-size !important;

      @include ellipsis();
    }
  }

  // 右侧箭头
  .el-sub-menu__icon-arrow {
    width: 13px !important;
    font-size: 13px !important;
  }

  // 菜单折叠
  .el-menu--collapse {
    .el-sub-menu.is-active {
      .el-sub-menu__title {
        .menu-icon {
          .art-svg-icon {
            // 选中菜单图标颜色
            color: var(--theme-color) !important;
          }
        }
      }
    }
  }

  // ---------------------- Design theme menu ----------------------
  .el-menu-design {
    @include theme-menu-base;
    @include menu-active(var(--theme-color), var(--el-color-primary-light-9));
    @include menu-hover($hover-bg-color);

    .el-sub-menu__icon-arrow {
      color: var(--art-gray-600);
    }
  }

  // ---------------------- Dark theme menu ----------------------
  .el-menu-dark {
    @include theme-menu-base;
    @include menu-active(#fff, #27282d, #fff);
    @include menu-hover(#0f1015);

    .el-sub-menu__icon-arrow {
      color: var(--art-gray-400);
    }
  }

  // ---------------------- Light theme menu ----------------------
  .el-menu-light {
    .el-sub-menu__title,
    .el-menu-item {
      .menu-icon {
        margin-left: 1px;
      }
    }

    .el-menu-item.is-active {
      background-color: var(--el-color-primary-light-9);

      .art-svg-icon {
        color: var(--theme-color) !important;
      }

      &::before {
        position: absolute;
        top: 0;
        left: 0;
        width: 4px;
        height: 100%;
        content: '';
        background: var(--theme-color);
      }
    }

    @include menu-hover($hover-bg-color);

    .el-sub-menu__icon-arrow {
      color: var(--art-gray-600);
    }
  }
}

@media only screen and (width <= 640px) {
  .layout-sidebar {
    .el-menu-design {
      > .el-sub-menu {
        margin-left: 0;
      }

      .el-sub-menu {
        width: 100% !important;
      }
    }
  }
}

// 菜单折叠 hover 弹窗样式（浅色主题）
.el-menu--vertical,
.el-menu--popup-container {
  @include popup-menu-base(var(--art-gray-200), var(--art-gray-900), var(--art-gray-200));
}

// 暗黑模式菜单样式
.dark {
  .el-menu--vertical,
  .el-menu--popup-container {
    @include popup-menu-base(var(--art-gray-200), var(--art-gray-900), #292a2e);
  }

  .layout-sidebar {
    // 图标颜色、文字颜色
    .menu-icon .art-svg-icon,
    .menu-name {
      color: var(--art-gray-800) !important;
    }

    // 选中的文字颜色跟图标颜色
    .el-menu-item.is-active {
      span,
      .menu-icon .art-svg-icon {
        color: var(--theme-color) !important;
      }
    }

    // 右侧箭头颜色
    .el-sub-menu__icon-arrow {
      color: #fff;
    }
  }
}
